home *** CD-ROM | disk | FTP | other *** search
/ PCMania 64 / PCMania CD64_1.iso / phy / phy004 / 3d / source / grflib.pas next >
Encoding:
Pascal/Delphi Source File  |  1997-04-02  |  43.3 KB  |  1,548 lines

  1. Unit GRFLIB;
  2.  
  3. {$F+}
  4. {$G+}
  5.  
  6. (*     Fichero de inclusión para compatibilizar la libreria GRAPH       *)
  7. (*con Turbo Pascal (no sería difícil adaptarla para otros compiladores) *)
  8. (*                          Por   N A V I   D.j.                        *)
  9.  
  10. INTERFACE
  11.  
  12. TYPE
  13.   dword     =   LongInt;
  14.  
  15. CONST
  16.   DPonPixel               =      0;
  17.   DBorraPantalla          =      1;
  18.   DDestVirtual            =      2;
  19.   DCreaVirtual            =      3;
  20.   DLinea                  =      4;
  21.   DCopiaPantalla          =      5;
  22.   DCogePixel              =      6;
  23.   DSegmentoPV             =      7;
  24.   DTrataError             =      8;
  25.   DCargaSprite            =      9;
  26.   DDibujaSprite           =      10;
  27.   DDestSprite             =      11;
  28.   DVaciaMEM               =      12;
  29.   DfPonPixel              =      13;
  30.   DfBorraPantalla         =      14;
  31.   DfLinea                 =      15;
  32.   DfCogePixel             =      16;
  33.   DfDibujaSprite          =      17;
  34.   DCogeColor              =      18;
  35.   DPonColor               =      19;
  36.   DCogePaleta             =      20;
  37.   DPonPaleta              =      21;
  38.   DFadeDown               =      22;
  39.   DCargaPaleta            =      23;
  40.   DFadeUp                 =      24;
  41.   DFadeTo                 =      25;
  42.   DBlackOut               =      26;
  43.   DInsertaDirPal          =      27;
  44.   DSegmentoPal            =      28;
  45.   DCargaCEL               =      29;
  46.   DCargaAnima             =      30;
  47.   DPonFrameAnima          =      31;
  48.   DfPonFrameAnima         =      32;
  49.   DDestAnima              =      33;
  50.   DInsertaDirSprite       =      34;
  51.   DInsertaDirAnima        =      35;
  52.   DInsertaDirPV           =      36;
  53.   DSegmentoSprite         =      37;
  54.   DSegmentoAnima          =      38;
  55.   DDescompPuntos          =      39;
  56.   DDescompWorm            =      40;
  57.   DfCaja                  =      41;
  58.   DCaja                   =      42;
  59.   DRectangulo             =      43;
  60.   DfRectangulo            =      44;
  61.   DPoligono               =      45;
  62.   DfPoligono              =      46;
  63.   DCreaSprite             =      47;
  64.   DCambiaSprites          =      48;
  65.   DGetImagen              =      49;
  66.   DfGetImagen             =      50;
  67.   DCirculo                =      51;
  68.   DfCirculo               =      52;
  69.   DDestPaleta             =      53;
  70.   DLeePCX                 =      54;
  71.   DLeeBMP                 =      55;
  72.   DInicGRAPH              =      56;
  73.   DEndGRAPH               =      57;
  74.   DCargaFuente            =      58;
  75.   DCambiaTipo             =      59;
  76.   DQueTipo                =      60;
  77.   DEscLetra               =      61;
  78.   DCogeFuenteDOS          =      62;
  79.   DSetCursor              =      63;
  80.   DGetCursor              =      64;
  81.   DEscribe                =      65;
  82.   DLeeLetra               =      66;
  83.   DLeeLetraEcho           =      67;
  84.   DLeeByte                =      68;
  85.   DLeeCadena              =      69;
  86.   DLeeWord                =      70;
  87.   DEscByte                =      71;
  88.   DEscWord                =      72;
  89.   DWrite                  =      73;
  90.   DNuevoArchivo           =      74;
  91.   DLeeEntrada             =      75;
  92.   DLeeTrozo               =      76;
  93.   DLongitudFile           =      77;
  94.   DFlipCopy               =      78;
  95.   DFlip                   =      79;
  96.   DSegmentoFuente         =      80;
  97.   DDoblaLineas            =      81;
  98.   DSetStart               =      82;
  99.   DSetVSPixels            =      83;
  100.   DPideXMS                =      84;
  101.   DLiberaXMS              =      85;
  102.   DGetAddress             =      86;
  103.   DMaximaXMS              =      87;
  104.   DGuardaFlat             =      88;
  105.   DCargaFlat              =      89;
  106.   DCargaBloque            =      90;
  107.   DCargaMapa              =      91;
  108.   DDestBloque             =      92;
  109.   DDestMapa               =      93;
  110.   DDibujaMapa             =      94;
  111.   DPosMapa                =      95;
  112.   DModoGrafico            =      96;
  113.   DModoTexto              =      97;
  114.   DInsertaDirBloque       =      98;
  115.   DInsertaDirMapa         =      99;
  116.   DSegmentoBloque         =      100;
  117.   DSegmentoMapa           =      101;
  118.   DResetGRAPH             =      102;
  119.   DPlayFli                =      103;
  120.   DCreaMapa               =      104;
  121.   DCreaBloque             =      105;
  122.   DDestFuente             =      106;
  123.   DInsertaDirFuente       =      107;
  124.  
  125.  
  126. VAR
  127.   Ssegmento :   word;
  128.   Soffset   :   word;
  129.   wvuelta   :   word;
  130.   bvuelta   :   byte;
  131.  
  132.   LERROR    :   Word;
  133.   Registro  :   Word;
  134.  
  135.   i        : Integer;
  136.   Bolsa    : Array [0..100] of Pointer;
  137.   Tamanyos : Array [0..100] of Word;
  138.  
  139. PROCEDURE CallPas;
  140. PROCEDURE InicPas;
  141. PROCEDURE LiberaMEM(puntero:word);
  142. PROCEDURE WaitVR;
  143. PROCEDURE PonFrameAnima(hdl, pv:byte; x, y, frame:word);
  144. PROCEDURE fPonFrameAnima(hdl, pv:byte; x, y, frame:word);
  145. PROCEDURE DestAnima(hdl:byte);
  146. {PROCEDURE CogeColor(registro:byte; VAR crojo, cverde, cazul:byte);}
  147. PROCEDURE PonColor(NReg, R, G, B:byte);
  148. PROCEDURE PonPaleta(Hdl, FCol, LCol:byte);
  149. PROCEDURE FadeDown(Retar:word; FCol, LCol:byte);
  150. PROCEDURE FadeUp(Retar:word; FCol, LCol:byte);
  151. PROCEDURE FadeTo(Hdl:byte; Retar:word; FCol, LCol:byte);
  152. PROCEDURE BlackOut(FCol, LCol:byte);
  153. PROCEDURE DestPaleta(hdl:byte);
  154. PROCEDURE PonPixel(x, y:word; color, pv:byte);
  155. PROCEDURE fPonPixel(x, y:word; color, pv:byte);
  156. PROCEDURE BorraPantalla(color, pv:byte);
  157. PROCEDURE fBorraPantalla(color, pv:byte);
  158. PROCEDURE Rectangulo(x1, y1, x2, y2:word; col, hdl:byte);
  159. PROCEDURE fRectangulo(x1, y1, x2, y2:word; col, hdl:byte);
  160. PROCEDURE Circulo(Xcen, Ycen, radio:word; hdl, col:byte); 
  161. PROCEDURE fCirculo(Xcen, Ycen, radio:word; hdl, col:byte); 
  162. PROCEDURE ModoGrafico;
  163. PROCEDURE ModoTexto;
  164. PROCEDURE Linea(Xi, Yi, Xf, Yf:word; color, pv:byte); 
  165. PROCEDURE fLinea(Xi, Yi, Xf, Yf:word; color, pv:byte); 
  166. PROCEDURE Caja(x1, y1, x2, y2:word; col, hdl:byte); 
  167. PROCEDURE fCaja(x1, y1, x2, y2:word; col, hdl:byte); 
  168. PROCEDURE Poligono(PTRVertices:Pointer; NVertices, col, hdl:byte); 
  169. PROCEDURE fPoligono(PTRVertices:Pointer; NVertices, col, hdl:byte); 
  170. PROCEDURE CopiaPantalla(Opv, Dpv:byte); 
  171. PROCEDURE DestVirtual(pv:byte); 
  172. PROCEDURE VaciaMEM;
  173. PROCEDURE TrataError;
  174. PROCEDURE DestSprite(hdl:byte);
  175. PROCEDURE CambiaSprites(hdl1, hdl2:byte); 
  176. PROCEDURE DibujaSprite(hdl, pv:byte; x, y:word); 
  177. PROCEDURE fDibujaSprite(hdl, pv:byte; x, y:word); 
  178. PROCEDURE CargaCEL(nombre:string;pv:byte); 
  179. PROCEDURE DescompPuntos(color:byte; semilla:word); 
  180. PROCEDURE DescompWorm(color:byte; semilla:word); 
  181. PROCEDURE InicGRAPH(modo:word; flags:dword); 
  182. PROCEDURE EndGRAPH;
  183. PROCEDURE CambiaTipo(new:byte); 
  184. PROCEDURE SetCursor(posx, posy:word); 
  185. {PROCEDURE GetCursor(VAR posx, posy:word); }
  186. PROCEDURE EscLetra(hdl, letra, pv, color:byte); 
  187. PROCEDURE Escribe(hdl:byte; cadena:string; pv, color, distx, disty:byte);
  188. PROCEDURE LeeCadena(hdl:byte; buffer:string; pv, color, distx:byte; longi:word);
  189. PROCEDURE Write(hdl:byte; cadena:string; pv, color, distx, disty:byte);
  190. PROCEDURE NuevoArchivo(nombre:string);
  191. PROCEDURE LeeEntrada(buffer:pointer; campo:word);
  192. PROCEDURE LeeTrozo(buffer:pointer; campo:word; longi, inicio:dword);
  193. PROCEDURE FlipCopy(Opv, Dpv:byte); 
  194. PROCEDURE Flip(Opv:byte); 
  195. PROCEDURE DoblaLineas;
  196. PROCEDURE SetStart(direc:word);
  197. PROCEDURE SetVSPixels(lineas:byte);
  198. PROCEDURE LiberaXMS(memo:word);
  199. PROCEDURE CargaFlat(hdl, tipo:byte; hdlxms:word); 
  200. PROCEDURE DestBloque(hdl:byte); 
  201. PROCEDURE DestMapa(hdl:byte); 
  202. PROCEDURE DibujaMapa(pv, hmapa, hblk:byte; posx, posy:dword); 
  203. PROCEDURE InsertaDirBloque(segm:word; longx, longy:byte; numero:word); 
  204. PROCEDURE InsertaDirMapa(segm, longx, longy:word); 
  205. PROCEDURE ResetGRAPH(modo:word; flags:dword); 
  206. PROCEDURE PlayFLI(nombre:string; pausa:word); 
  207. PROCEDURE DestFuente(hdl:byte); 
  208. PROCEDURE InsertaDirFuente(segm:word; longx, longy, prim, ult:byte);
  209. FUNCTION PideMEM(cantidad:word):word;
  210. FUNCTION CargaAnima(nombre:string; longX, longY, NSprites:word):byte;
  211. FUNCTION CogePaleta:byte;
  212. FUNCTION CargaPaleta(nombre:string):byte;
  213. FUNCTION CogePixel(x, y:word; pv:byte):byte;
  214. FUNCTION fCogePixel(x, y:word; pv:byte):byte;
  215. FUNCTION CreaVirtual:byte;
  216. FUNCTION SegmentoPV(pv:byte):word;
  217. FUNCTION SegmentoPal(Hdl:byte):word;
  218. FUNCTION SegmentoSprite(Hdl:byte):word;
  219. FUNCTION SegmentoAnima(Hdl:byte):word;
  220. FUNCTION InsertaDirPV(segm:word):byte;
  221. FUNCTION InsertaDirPal(segm:word):byte;
  222. FUNCTION InsertaDirSprite(segm, lx, ly:word):byte;
  223. FUNCTION InsertaDirAnima(segm, lx, ly, num:word):byte;
  224. FUNCTION CargaSprite(nombre:string; lonx, lony:word):byte;
  225. FUNCTION CreaSprite(lx, ly:word):byte; 
  226. FUNCTION GetImagen(x1, y1, x2, y2:word; hdl:byte):byte; 
  227. FUNCTION fGetImagen(x1, y1, x2, y2:word; hdl:byte):byte; 
  228. FUNCTION LeePCX(nombre:string; hdl:byte):byte;
  229. FUNCTION LeeBMP(nombre:string; hdl:byte):byte; 
  230. FUNCTION QueTipo:byte;
  231. FUNCTION CargaFuente(nombre:string; lonx, lony, prime, ulti:byte):byte;
  232. FUNCTION CogeFuenteDOS:byte;
  233. FUNCTION LeeLetra:byte;
  234. FUNCTION LeeLetraEcho(hdl, pv, color:byte):byte;
  235. FUNCTION LongitudFile(campo:word):dword;
  236. FUNCTION SegmentoFuente(Hdl:byte):word;
  237. FUNCTION PideXMS(memo:word):word;
  238. FUNCTION GetAddress(hdl:word):dword;
  239. FUNCTION MaximaXMS:word;
  240. FUNCTION GuardaFlat(hdl, tipo:byte):word; 
  241. FUNCTION CargaBloque(nombre:string):byte; 
  242. FUNCTION CargaMapa(nombre:string):byte; 
  243. FUNCTION PosMapa(hdl:byte; posx, posy:word):word; 
  244. FUNCTION SegmentoBloque(Hdl:byte):word; 
  245. FUNCTION SegmentoMapa(Hdl:byte):word; 
  246. FUNCTION CreaMapa(longx, longy:word):byte; 
  247. FUNCTION CreaBloque(longx, longy:byte; numero:word):byte; 
  248.  
  249. {$L c:\bp\units\GRAPHP.OBJ}
  250.  
  251. IMPLEMENTATION
  252.  
  253. PROCEDURE CallPas; external;
  254. PROCEDURE InicPas; external;
  255.  
  256. FUNCTION Segmento(punt:pointer):word; Assembler;
  257. ASM
  258.   db 66h
  259.   mov ax, word ptr punt
  260.   mov cl, 16
  261.   db 66h
  262.   shr ax, cl
  263. END;
  264.  
  265. PROCEDURE CargaDS(modo:byte); Assembler;
  266. ASM
  267.   nop; nop; nop; nop; nop; nop; nop; nop; nop; nop; nop; 
  268.   cmp  modo, 1
  269.   je  @@get
  270.   mov  ax, ds
  271.   mov  cs:[offset @@memvar], ax
  272.   jmp @@fin
  273.  @@memvar:
  274.   dw 0
  275.  @@get:
  276.   mov  ax,cs:[offset @@memvar]
  277.   mov  ds,ax
  278.  @@fin:
  279. END;
  280.  
  281. FUNCTION PideMEM(cantidad:word):word;
  282. VAR
  283.   p,
  284.   pos:Pointer;
  285.   i:Integer;
  286. BEGIN
  287.   asm pusha; push si; push di; end;
  288.   Cantidad:=Cantidad*16;
  289.   asm push ds end;
  290.   CargaDS(1);
  291.   GetMem(p, cantidad);
  292.   asm pop ds end;
  293.   i:=0; pos:=pointer(1);
  294.   While pos<>NIL Do
  295.    BEGIN
  296.      pos:=Bolsa[i];
  297.      If pos=NIL Then
  298.       BEGIN
  299.         Bolsa[i]:=p;
  300.         Tamanyos[i]:=cantidad;
  301.       END;
  302.      i:=i+1;
  303.    END;
  304.   PideMEM:=Segmento(p);
  305.   asm pop di; pop si; popa; end;
  306. END;
  307.  
  308. PROCEDURE LiberaMEM(puntero:word);
  309. VAR
  310.   p:Pointer;
  311.   i:Integer;
  312. BEGIN
  313.   asm pusha; push si; push di; end;
  314.   For i:=0 To 100 DO
  315.    BEGIN
  316.      p:=Bolsa[i];
  317.      If Seg(p)=puntero Then
  318.       BEGIN
  319.         FreeMem(p, Tamanyos[i]);
  320.         Bolsa[i]:=NIL;
  321.       END;
  322.    END;
  323.   asm pop di; pop si; popa; end;
  324. END;
  325.  
  326. PROCEDURE WaitVR; Assembler;
  327. ASM
  328.   mov dx,03DAh
  329.  @@St1:
  330.   in al,dx
  331.   test al,08h
  332.   jz @@St1
  333.  @@St2:
  334.   in al,dx
  335.   test al,08h
  336.   jnz @@St2
  337. END;
  338.  
  339. FUNCTION CargaAnima(nombre:string; longX, longY, NSprites:word):byte;
  340. BEGIN
  341.         Ssegmento:=Seg(nombre);
  342.         Soffset:=Ofs(nombre);
  343.         asm  push ds end;
  344.         asm  push bp end;
  345.         asm  mov dx,Soffset; inc dx end;
  346.         asm  mov ax,Ssegmento end;
  347.         asm  mov ds,ax end;
  348.         asm  mov ax, NSprites end;
  349.         asm  mov bx, longX end;
  350.         asm  mov cx, longY end;
  351.         asm  push DCARGAANIMA end;
  352.         asm CALL CallPas; pop bx end;
  353.         asm  pop bp end;
  354.         asm  pop ds end;
  355.         asm  mov bvuelta,al end;
  356.         CargaAnima:=bvuelta;
  357. END;
  358.  
  359. PROCEDURE PonFrameAnima(hdl, pv:byte; x, y, frame:word);
  360. BEGIN
  361.         asm  push ds end;
  362.         asm  push bp end;
  363.         asm  mov al,pv end;
  364.         asm  mov ah,hdl end;
  365.         asm  mov bx,y end;
  366.         asm  mov cx,frame end;
  367.         asm  mov bp,x end;
  368.         asm  push DPONFRAMEANIMA end;
  369.         asm CALL CallPas; pop ax end;
  370.         asm  pop bp end;
  371.         asm  pop ds end;
  372. END;
  373.  
  374. PROCEDURE fPonFrameAnima(hdl, pv:byte; x, y, frame:word);
  375. BEGIN
  376.         asm  push ds end;
  377.         asm  push bp end;
  378.         asm  mov al,pv end;
  379.         asm  mov ah,hdl end;
  380.         asm  mov bx,y end;
  381.         asm  mov cx,frame end;
  382.         asm  mov bp,x end;
  383.         asm  push DFPONFRAMEANIMA end;
  384.         asm CALL CallPas; pop ax end;
  385.         asm  pop bp end;
  386.         asm  pop ds end;
  387. END;
  388.  
  389. PROCEDURE DestAnima(hdl:byte);
  390. BEGIN
  391.         asm  push bp end;
  392.         asm  mov al,hdl end;
  393.         asm  push DDESTANIMA end;
  394.         asm CALL CallPas; pop ax end;
  395.         asm  pop bp end;
  396. END;
  397.  
  398. (*
  399. PROCEDURE CogeColor(registro:byte; VAR crojo, cverde, cazul:byte);
  400. BEGIN
  401.         asm  mov al, registro end;
  402.         asm  push DCOGECOLOR end;
  403.         asm CALL CallPas; pop ax end;
  404.         asm  mov crojo, cl  end;
  405.         asm  mov cverde, bl  end;
  406.         asm  mov cazul, al  end;
  407. END;*)
  408.  
  409. PROCEDURE PonColor(NReg, R, G, B:byte);
  410. BEGIN
  411.         asm  mov cl,R end;
  412.         asm  mov bl,G end;
  413.         asm  mov al,B end;
  414.         asm  mov ah,NReg end;
  415.         asm  push DPONCOLOR end;
  416.         asm CALL CallPas; pop ax end;
  417. END;
  418.  
  419. FUNCTION CogePaleta:byte;
  420. BEGIN
  421.         asm  push bp end;
  422.         asm  push DCOGEPALETA end;
  423.         asm CALL CallPas; pop bx end;
  424.         asm  pop bp end;
  425.         asm  mov bvuelta,al end;
  426.         CogePaleta:=bvuelta;
  427. END;
  428.  
  429. PROCEDURE PonPaleta(Hdl, FCol, LCol:byte);
  430. BEGIN        
  431.         asm  push bp end;
  432.         asm  mov bl,LCol end;
  433.         asm  mov al,FCol end;
  434.         asm  mov ah,Hdl end;
  435.         asm  push DPONPALETA end;
  436.         asm CALL CallPas; pop ax end;
  437.         asm  pop bp end;
  438. END;
  439.  
  440. FUNCTION CargaPaleta(nombre:string):byte;
  441. BEGIN
  442.         Ssegmento:=SEG(nombre);
  443.         Soffset:=OFS(nombre);
  444.         asm  push ds end;
  445.         asm  mov dx,Soffset; inc dx end;
  446.         asm  mov ax,Ssegmento end;
  447.         asm  mov ds,ax end;
  448.         asm  push DCARGAPALETA end;
  449.         asm CALL CallPas; pop bx end;
  450.         asm  pop ds end;
  451.     asm  mov bvuelta,al end;
  452.         CargaPaleta:=bvuelta;
  453. END;
  454.  
  455. PROCEDURE FadeDown(Retar:word; FCol, LCol:byte);
  456. BEGIN
  457.         asm  push bp end;
  458.         asm  mov dh,LCol end;
  459.         asm  mov dl,FCol end;
  460.         asm  mov cx,Retar end;
  461.         asm  push DFADEDOWN end;
  462.         asm CALL CallPas; pop ax end;
  463.         asm  pop bp end;
  464. END;
  465.  
  466. PROCEDURE FadeUp(Retar:word; FCol, LCol:byte);
  467. BEGIN
  468.         asm  push bp end;
  469.         asm  mov dh,LCol end;
  470.         asm  mov dl,FCol end;
  471.         asm  mov cx,Retar end;
  472.         asm  push DFADEUP end;
  473.         asm CALL CallPas; pop ax end;
  474.         asm  pop bp end;
  475. END;
  476.  
  477. PROCEDURE FadeTo(Hdl:byte; Retar:word; FCol, LCol:byte);
  478. BEGIN
  479.         asm  push bp end;
  480.         asm  mov dh,LCol end;
  481.         asm  mov dl,FCol end;
  482.         asm  mov cx,Retar end;
  483.         asm  mov al,Hdl end;
  484.         asm  push DFADETO end;
  485.         asm CALL CallPas; pop ax end;
  486.         asm  pop bp end;
  487. END;
  488.  
  489. PROCEDURE BlackOut(FCol, LCol:byte);
  490. BEGIN
  491.         asm  mov bl,LCol end;
  492.         asm  mov al,FCol end;
  493.         asm  push DBLACKOUT end;
  494.         asm CALL CallPas; pop ax end;
  495. END;
  496.  
  497. PROCEDURE DestPaleta(hdl:byte);
  498. BEGIN
  499.         asm  mov al,hdl end;
  500.         asm  push DDESTPALETA end;
  501.         asm CALL CallPas; pop ax end;
  502. END;
  503.  
  504. PROCEDURE PonPixel(x, y:word; color, pv:byte);
  505. BEGIN
  506.         asm  push bp end;
  507.         asm  mov bx,x end;
  508.         asm  mov dx,y end;
  509.         asm  mov cl,color end;
  510.         asm  mov al,pv end;
  511.         asm  push DPONPIXEL end;
  512.         asm CALL CallPas; pop ax end;
  513.         asm  pop bp end;
  514. END;
  515.  
  516. PROCEDURE fPonPixel(x, y:word; color, pv:byte);
  517. BEGIN
  518.         asm  push bp end;
  519.         asm  mov bx,x end;
  520.         asm  mov dx,y end;
  521.         asm  mov cl,color end;
  522.         asm  mov al,pv end;
  523.         asm  push DFPONPIXEL end;
  524.         asm CALL CallPas; pop ax end;
  525.         asm  pop bp end;
  526. END;
  527.  
  528. PROCEDURE BorraPantalla(color, pv:byte);
  529. BEGIN
  530.         asm  push bp end;
  531.         asm  mov cl,color end;
  532.         asm  mov al,pv end;
  533.         asm  push DBORRAPANTALLA end;
  534.         asm CALL CallPas; pop ax end;
  535.         asm  pop bp end;
  536. END;
  537.  
  538. PROCEDURE fBorraPantalla(color, pv:byte);
  539. BEGIN
  540.         asm  push bp end;
  541.         asm  mov cl,color end;
  542.         asm  mov al,pv end;
  543.         asm  push DFBORRAPANTALLA end;
  544.         asm CALL CallPas; pop ax end;
  545.         asm  pop bp end;
  546. END;
  547.  
  548. FUNCTION CogePixel(x, y:word; pv:byte):byte;
  549. BEGIN
  550.         asm  push bp end;
  551.         asm  mov al,pv end;
  552.         asm  mov bx,x end;
  553.         asm  mov dx,y end;
  554.         asm  push DCOGEPIXEL end;
  555.         asm CALL CallPas; pop ax end;
  556.         asm  mov bvuelta,cl end;
  557.         asm  pop bp end;
  558.         CogePixel:=bvuelta;
  559. END;
  560.  
  561. FUNCTION fCogePixel(x, y:word; pv:byte):byte;
  562. BEGIN
  563.         asm  push bp end;
  564.         asm  mov al,pv end;
  565.         asm  mov bx,x end;
  566.         asm  mov dx,y end;
  567.         asm  push DFCOGEPIXEL end;
  568.         asm CALL CallPas; pop ax end;
  569.         asm  mov bvuelta,cl end;
  570.         asm  pop bp end;
  571.         fCogePixel:=bvuelta;
  572. END;
  573.  
  574. PROCEDURE Rectangulo(x1, y1, x2, y2:word; col, hdl:byte);
  575. BEGIN
  576.         asm  push bp end;
  577.         asm  mov al,hdl end;
  578.         asm  mov cl,col end;
  579.         asm  mov bx,x1 end;
  580.         asm  mov si,y1 end;
  581.         asm  mov dx,x2 end;
  582.         asm  mov di,y2 end;
  583.         asm  push DRECTANGULO end;
  584.         asm CALL CallPas; pop ax end;
  585.         asm  pop bp end;
  586. END;
  587.  
  588. PROCEDURE fRectangulo(x1, y1, x2, y2:word; col, hdl:byte);
  589. BEGIN
  590.         asm  push bp end;
  591.         asm  mov al, hdl end;
  592.         asm  mov cl, col end;
  593.         asm  mov bx,x1 end;
  594.         asm  mov si,y1 end;
  595.         asm  mov dx,x2 end;
  596.         asm  mov di,y2 end;
  597.         asm  push DFRECTANGULO end;
  598.         asm CALL CallPas; pop ax end;
  599.         asm  pop bp end;
  600. END;
  601.  
  602. PROCEDURE Circulo(Xcen, Ycen, radio:word; hdl, col:byte); BEGIN
  603.         asm  push bp end;
  604.         asm  mov ch,hdl end;
  605.         asm  mov bx,Xcen end;
  606.         asm  mov dx,Ycen end;
  607.         asm  mov ax,radio end;
  608.         asm  mov cl,col end;
  609.         asm  push DCIRCULO end;
  610.         asm CALL CallPas; pop ax end;
  611.         asm  pop bp end;END;
  612.  
  613. PROCEDURE fCirculo(Xcen, Ycen, radio:word; hdl, col:byte); BEGIN
  614.         asm  push bp end;
  615.         asm  mov ch,hdl end;
  616.         asm  mov bx,Xcen end;
  617.         asm  mov dx,Ycen end;
  618.         asm  mov ax,radio end;
  619.         asm  mov cl,col end;
  620.         asm  push DFCIRCULO end;
  621.         asm CALL CallPas; pop ax end;
  622.         asm  pop bp end;END;
  623.  
  624. PROCEDURE ModoGrafico;
  625. BEGIN
  626.         asm  push ds end;
  627.         asm  push bp end;
  628.         asm  push DMODOGRAFICO end;
  629.         asm CALL CallPas; pop ax end;
  630.         asm  pop bp end;
  631.         asm  pop ds end;
  632. END;
  633.  
  634. PROCEDURE ModoTexto;
  635. BEGIN
  636.         asm  push ds end;
  637.         asm  push bp end;
  638.         asm  push DMODOTEXTO end;
  639.         asm CALL CallPas; pop ax end;
  640.         asm  pop bp end;
  641.         asm  pop ds end;
  642. END;
  643.  
  644. PROCEDURE Linea(Xi, Yi, Xf, Yf:word; color, pv:byte); BEGIN
  645.         asm  push bp end;
  646.         asm  mov bx,Xi end;
  647.         asm  mov dx,Xf end;
  648.         asm  mov si,Yi end;
  649.         asm  mov di,Yf end;
  650.         asm  mov ch,color end;
  651.         asm  mov al,pv end;
  652.         asm  push DLINEA end;
  653.         asm CALL CallPas; pop ax end;
  654.         asm  pop bp end;END;
  655.  
  656. PROCEDURE fLinea(Xi, Yi, Xf, Yf:word; color, pv:byte); BEGIN
  657.         asm  push bp end;
  658.         asm  mov bx,Xi end;
  659.         asm  mov dx,Xf end;
  660.         asm  mov si,Yi end;
  661.         asm  mov di,Yf end;
  662.         asm  mov ch,color end;
  663.         asm  mov al,pv end;
  664.         asm  push DFLINEA end;
  665.         asm CALL CallPas; pop ax end;
  666.         asm  pop bp end;END;
  667.  
  668. PROCEDURE Caja(x1, y1, x2, y2:word; col, hdl:byte); BEGIN
  669.         asm  push bp end;
  670.         asm  mov al,hdl end;
  671.         asm  mov cl,col end;
  672.         asm  mov bx,x1 end;
  673.         asm  mov si,y1 end;
  674.         asm  mov dx,x2 end;
  675.         asm  mov di,y2 end;
  676.         asm  push DCAJA end;
  677.         asm CALL CallPas; pop ax end;
  678.         asm  pop bp end;END;
  679.  
  680. PROCEDURE fCaja(x1, y1, x2, y2:word; col, hdl:byte); BEGIN
  681.         asm  push bp end;
  682.         asm  mov al,hdl end;
  683.         asm  mov cl,col end;
  684.         asm  mov bx,x1 end;
  685.         asm  mov si,y1 end;
  686.         asm  mov dx,x2 end;
  687.         asm  mov di,y2 end;
  688.         asm  push DFCAJA end;
  689.         asm CALL CallPas; pop ax end;
  690.         asm  pop bp end;END;
  691.  
  692. PROCEDURE Poligono(PTRVertices:Pointer; NVertices, col, hdl:byte); BEGIN
  693.         Ssegmento:=SEG(PTRVertices);
  694.         Soffset:=OFS(PTRVertices);
  695.         asm  push ds end;
  696.         asm  push bp end;
  697.         asm  mov dx,Soffset end;
  698.         asm  mov ax,Ssegmento end;
  699.         asm  mov ds,ax end;
  700.         asm  mov cl,col end;
  701.         asm  mov al,hdl end;
  702.         asm  mov ch,NVertices end;
  703.         asm  push DPOLIGONO end;
  704.         asm CALL CallPas; pop ax end;
  705.         asm  pop bp end;
  706.         asm  pop ds end;END;
  707.  
  708. PROCEDURE fPoligono(PTRVertices:Pointer; NVertices, col, hdl:byte); BEGIN
  709.         Ssegmento:=SEG(PTRVertices);
  710.         Soffset:=OFS(PTRVertices);
  711.         asm  push ds end;
  712.         asm  push bp end;
  713.         asm  mov dx,Soffset end;
  714.         asm  mov ax,Ssegmento end;
  715.         asm  mov ds,ax end;
  716.         asm  mov cl,col end;
  717.         asm  mov al,hdl end;
  718.         asm  mov ch,NVertices end;
  719.         asm  push DFPOLIGONO end;
  720.         asm CALL CallPas; pop ax end;
  721.         asm  pop bp end;
  722.         asm  pop ds end;END;
  723.  
  724. FUNCTION CreaVirtual:byte;
  725. BEGIN
  726.         asm  push DCREAVIRTUAL end;
  727.         asm CALL CallPas; pop bx end;
  728.         asm  mov bvuelta,al end;
  729.         CreaVirtual:=bvuelta;
  730. END;
  731.  
  732. PROCEDURE CopiaPantalla(Opv, Dpv:byte); BEGIN
  733.         asm  push ds end;
  734.         asm  push bp end;
  735.         asm  mov al,Opv end;
  736.         asm  mov ah,Dpv end;
  737.         asm  push DCOPIAPANTALLA end;
  738.         asm CALL CallPas; pop ax end;
  739.         asm  pop bp end;
  740.         asm  pop ds end;
  741. END;
  742.  
  743. PROCEDURE DestVirtual(pv:byte); BEGIN
  744.         asm  push bp end;
  745.         asm  mov al,pv end;
  746.         asm  push DDESTVIRTUAL end;
  747.         asm CALL CallPas; pop ax end;
  748.         asm  pop bp end;
  749. END;
  750.  
  751. FUNCTION SegmentoPV(pv:byte):word;
  752. BEGIN
  753.         asm  mov al,pv end;
  754.         asm  push DSEGMENTOPV end;
  755.         asm CALL CallPas; pop ax end;
  756.         asm  mov wvuelta,es end;
  757.         SegmentoPV:=wvuelta;
  758. END;
  759.  
  760. FUNCTION SegmentoPal(Hdl:byte):word;
  761. BEGIN
  762.         asm  mov al,Hdl end;
  763.         asm  push DSEGMENTOPAL end;
  764.         asm CALL CallPas; pop ax end;
  765.         asm  mov wvuelta,es end;
  766.         SegmentoPal:=wvuelta;
  767. END;
  768.  
  769. FUNCTION SegmentoSprite(Hdl:byte):word;
  770. BEGIN
  771.         asm  mov al,Hdl end;
  772.         asm  push DSEGMENTOSPRITE end;
  773.         asm CALL CallPas; pop ax end;
  774.         asm  mov wvuelta,es end;
  775.         SegmentoSprite:=wvuelta;
  776. END;
  777.  
  778. FUNCTION SegmentoAnima(Hdl:byte):word;
  779. BEGIN
  780.         asm  mov al,Hdl end;
  781.         asm  push DSEGMENTOANIMA end;
  782.         asm CALL CallPas; pop ax end;
  783.         asm  mov wvuelta,es end;
  784.         SegmentoAnima:=wvuelta;
  785. END;
  786.  
  787. PROCEDURE VaciaMEM;
  788. BEGIN
  789.   asm  push DVACIAMEM end;
  790.   asm CALL CallPas; pop ax end;
  791. END;
  792.  
  793. PROCEDURE TrataError;
  794. BEGIN
  795.   asm  push DTRATAERROR end;
  796.   asm CALL CallPas; pop ax end;
  797. END;
  798.  
  799. FUNCTION InsertaDirPV(segm:word):byte;
  800. BEGIN
  801.         asm  mov ax,segm end;
  802.         asm  mov es,ax end;
  803.         asm  push DINSERTADIRPV end;
  804.         asm CALL CallPas; pop bx end;
  805.         asm  mov bvuelta,al end;
  806.         InsertaDirPV:=bvuelta;
  807. END;
  808.  
  809. FUNCTION InsertaDirPal(segm:word):byte;
  810. BEGIN
  811.         asm  mov ax,segm end;
  812.         asm  mov es,ax end;
  813.         asm  push DINSERTADIRPAL end;
  814.         asm CALL CallPas; pop bx end;
  815.         asm  mov bvuelta,al end;
  816.         InsertaDirPal:=bvuelta;
  817. END;
  818.  
  819. FUNCTION InsertaDirSprite(segm, lx, ly:word):byte;
  820. BEGIN
  821.         asm  mov ax,segm end;
  822.         asm  mov es,ax end;
  823.         asm  mov ax,lx end;
  824.         asm  mov cx,ly end;
  825.         asm  push DINSERTADIRSPRITE end;
  826.         asm CALL CallPas; pop bx end;
  827.         asm  mov bvuelta,al end;
  828.         InsertaDirSprite:=bvuelta;
  829. END;
  830.  
  831. FUNCTION InsertaDirAnima(segm, lx, ly, num:word):byte;
  832. BEGIN
  833.         asm  mov ax,segm end;
  834.         asm  mov es,ax end;
  835.         asm  mov ax,lx end;
  836.         asm  mov cx,ly end;
  837.         asm  mov si,num end;
  838.         asm  push DINSERTADIRANIMA end;
  839.         asm CALL CallPas; pop bx end;
  840.         asm  mov bvuelta,al end;
  841.         InsertaDirAnima:=bvuelta;
  842. END;
  843.  
  844. FUNCTION CargaSprite(nombre:string; lonx, lony:word):byte;
  845. BEGIN
  846.         Ssegmento:=Seg(nombre);
  847.         Soffset:=Ofs(nombre);
  848.         asm  push ds end;
  849.         asm  push bp end;
  850.         asm  mov dx,Soffset; inc dx end;
  851.         asm  mov ax,Ssegmento end;
  852.         asm  mov ds,ax end;
  853.         asm  mov bx,lonx end;
  854.         asm  mov cx,lony end;
  855.         asm  push DCARGASPRITE end;
  856.         asm CALL CallPas; pop bx end;
  857.         asm  pop bp end;
  858.         asm  pop ds end;
  859.         asm  mov bvuelta,al end;
  860.         CargaSprite:=bvuelta;
  861. END;
  862.  
  863. PROCEDURE DestSprite(hdl:byte);
  864. BEGIN
  865.         asm  push bp end;
  866.         asm  mov al,hdl end;
  867.         asm  push DDESTSPRITE end;
  868.         asm CALL CallPas; pop ax end;
  869.         asm  pop bp end;
  870. END;
  871.  
  872. PROCEDURE CambiaSprites(hdl1, hdl2:byte); BEGIN
  873.         asm  push bp end;
  874.         asm  mov al,hdl1 end;
  875.         asm  mov dl,hdl2 end;
  876.         asm  push DCAMBIASPRITES end;
  877.         asm CALL CallPas; pop ax end;
  878.         asm  pop bp end;END;
  879.  
  880. FUNCTION CreaSprite(lx, ly:word):byte; BEGIN
  881.         asm  mov bx,lx end;
  882.         asm  mov cx,ly end;
  883.         asm  push DCREASPRITE end;
  884.         asm CALL CallPas; pop bx end;
  885.     asm  mov bvuelta, al end;
  886.         CreaSprite:=bvuelta;END;
  887.  
  888. PROCEDURE DibujaSprite(hdl, pv:byte; x, y:word); BEGIN
  889.         asm  push bp end;
  890.         asm  push ds end;
  891.         asm  mov al,pv end;
  892.         asm  mov ah,hdl end;
  893.         asm  mov bx,y end;
  894.         asm  mov bp,x end;
  895.         asm  push DDIBUJASPRITE end;
  896.         asm CALL CallPas; pop ax end;
  897.         asm  pop ds end;
  898.         asm  pop bp end;END;
  899.  
  900. PROCEDURE fDibujaSprite(hdl, pv:byte; x, y:word); BEGIN
  901.         asm  push bp end;
  902.         asm  push ds end;
  903.         asm  mov al,pv end;
  904.         asm  mov ah,hdl end;
  905.         asm  mov bx,y end;
  906.         asm  mov bp,x end;
  907.         asm  push DFDIBUJASPRITE end;
  908.         asm CALL CallPas; pop ax end;
  909.         asm  pop ds end;
  910.         asm  pop bp end;END;
  911.  
  912. PROCEDURE CargaCEL(nombre:string;pv:byte); BEGIN
  913.         Ssegmento:=Seg(nombre);
  914.         Soffset:=Ofs(nombre);
  915.         asm  push ds end;
  916.         asm  push bp end;
  917.         asm  mov dx,Soffset; inc dx end;
  918.         asm  mov ax,Ssegmento end;
  919.         asm  mov ds,ax end;
  920.         asm  mov al, pv end;
  921.         asm  push DCARGACEL end;
  922.         asm CALL CallPas; pop ax end;
  923.         asm  pop bp end;
  924.         asm  pop ds end;END;
  925.  
  926. FUNCTION GetImagen(x1, y1, x2, y2:word; hdl:byte):byte; BEGIN
  927.         asm  push bp end;
  928.         asm  push ds end;
  929.         asm  mov al,hdl end;
  930.         asm  mov bx,x1 end;
  931.         asm  mov si,y1 end;
  932.         asm  mov dx,x2 end;
  933.         asm  mov di,y2 end;
  934.         asm  push DGETIMAGEN end;
  935.         asm CALL CallPas; pop bx end;
  936.         asm  pop ds end;
  937.         asm  pop bp end;
  938.         asm  mov bvuelta,al end;
  939.         GetImagen:=bvuelta;END;
  940.  
  941. FUNCTION fGetImagen(x1, y1, x2, y2:word; hdl:byte):byte; BEGIN
  942.         asm  push bp end;
  943.         asm  push ds end;
  944.         asm  mov al,hdl end;
  945.         asm  mov bx,x1 end;
  946.         asm  mov si,y1 end;
  947.         asm  mov dx,x2 end;
  948.         asm  mov di,y2 end;
  949.         asm  push DFGETIMAGEN end;
  950.         asm CALL CallPas; pop bx end;
  951.         asm  pop ds end;
  952.         asm  pop bp end;
  953.         asm  mov bvuelta,al end;
  954.         fGetImagen:=bvuelta;END;
  955.  
  956. PROCEDURE DescompPuntos(color:byte; semilla:word); BEGIN
  957.         asm  push bp end;
  958.         asm  mov ax,semilla end;
  959.         asm  mov cl,color end;
  960.         asm  push DDESCOMPPUNTOS end;
  961.         asm CALL CallPas; pop ax end;
  962.         asm  pop bp end;END;
  963.  
  964. PROCEDURE DescompWorm(color:byte; semilla:word); BEGIN
  965.         asm  push bp end;
  966.         asm  mov ax,semilla end;
  967.         asm  mov cl,color end;
  968.         asm  push DDESCOMPWORM end;
  969.         asm CALL CallPas; pop ax end;
  970.         asm  pop bp end;
  971. END;
  972.  
  973. FUNCTION LeePCX(nombre:string; hdl:byte):byte;
  974. BEGIN
  975.         Ssegmento:=SEG(nombre);
  976.         Soffset:=OFS(nombre);
  977.         asm  push ds end;
  978.         asm  mov dx,Soffset; inc dx end;
  979.         asm  mov ax,Ssegmento end;
  980.         asm  mov ds,ax end;
  981.         asm  mov al,hdl end;
  982.         asm  push DLEEPCX end;
  983.         asm CALL CallPas; pop bx end;
  984.         asm  pop ds end;
  985.     asm  mov bvuelta,ah end;
  986.         LeePCX:=bvuelta;
  987. END;
  988.  
  989. {  Nuevas en GRAPH 2.0 }
  990.  
  991. FUNCTION LeeBMP(nombre:string; hdl:byte):byte; BEGIN
  992.         Ssegmento:=SEG(nombre);
  993.         Soffset:=OFS(nombre);
  994.         asm  push ds end;
  995.         asm  mov dx,Soffset; inc dx end;
  996.         asm  mov ax,Ssegmento end;
  997.         asm  mov ds,ax end;
  998.         asm  mov al,hdl end;
  999.         asm  push DLEEBMP end;
  1000.         asm CALL CallPas; pop bx end;
  1001.         asm  pop ds end;
  1002.     asm  mov bvuelta,al end;
  1003.         LeeBMP:=bvuelta;END;
  1004.  
  1005. PROCEDURE InicGRAPH(modo:word; flags:dword); BEGIN
  1006.         asm  push ds end;
  1007.         asm  push bp end;
  1008.         asm  mov bx,modo end;
  1009.         asm  db 66h
  1010.              mov ax, word ptr flags end;
  1011.         asm  push DINICGRAPH end;
  1012.         asm CALL CallPas; pop ax end;
  1013.         asm  pop bp end;
  1014.         asm  pop ds end;END;
  1015.  
  1016. PROCEDURE EndGRAPH;
  1017. BEGIN
  1018.         asm  push ds end;
  1019.         asm  push bp end;
  1020.         asm  push DENDGRAPH end;
  1021.         asm CALL CallPas; pop ax end;
  1022.         asm  pop bp end;
  1023.         asm  pop ds end;END;
  1024.  
  1025. PROCEDURE CambiaTipo(new:byte); BEGIN
  1026.         asm  mov al,new end;
  1027.         asm  push DCAMBIATIPO end;
  1028.         asm CALL CallPas; pop ax end;END;
  1029.  
  1030. FUNCTION QueTipo:byte;
  1031. BEGIN
  1032.         asm  push DCAMBIATIPO end;
  1033.         asm CALL CallPas; pop bx end;
  1034.         asm  mov bvuelta,al end;
  1035.         QueTipo:=bvuelta;
  1036. END;
  1037.  
  1038. PROCEDURE SetCursor(posx, posy:word); BEGIN
  1039.         asm  mov bx,posx end;
  1040.         asm  mov dx,posy end;
  1041.         asm  push DSETCURSOR end;
  1042.         asm CALL CallPas; pop ax end;
  1043.         END;
  1044. (*
  1045. PROCEDURE GetCursor(VAR posx, posy:word); BEGIN
  1046.         asm  push DGETCURSOR end;
  1047.         asm CALL CallPas; pop ax end;
  1048.         asm  mov posx,bx end;
  1049.         asm  mov posy,dx end;END;
  1050. *)
  1051. FUNCTION CargaFuente(nombre:string; lonx, lony, prime, ulti:byte):byte;
  1052. BEGIN
  1053.         Ssegmento:=SEG(nombre);
  1054.         Soffset:=OFS(nombre);
  1055.         asm  push ds end;
  1056.         asm  push bp end;
  1057.         asm  mov dx,Soffset; inc dx end;
  1058.         asm  mov ax,Ssegmento end;
  1059.         asm  mov ds,ax end;
  1060.         asm  mov bl,lonx end;
  1061.         asm  mov bh,lony end;
  1062.         asm  mov ah,prime end;
  1063.         asm  mov al,ulti end;
  1064.         asm  push DCARGAFUENTE end;
  1065.         asm CALL CallPas; pop bx end;
  1066.         asm  pop bp end;
  1067.         asm  pop ds end;
  1068.         asm  mov bvuelta,al end;
  1069.         CargaFuente:=bvuelta;
  1070. END;
  1071.  
  1072. FUNCTION CogeFuenteDOS:byte;
  1073. BEGIN
  1074.         asm  push bp end;
  1075.         asm  push ds end;
  1076.         asm  push DCOGEFUENTEDOS end;
  1077.         asm CALL CallPas; pop bx end;
  1078.         asm  pop ds end;
  1079.         asm  pop bp end;
  1080.         asm  mov bvuelta,al end;
  1081.         CogeFuenteDOS:=bvuelta;
  1082. END;
  1083.  
  1084. PROCEDURE EscLetra(hdl, letra, pv, color:byte); BEGIN
  1085.         asm  push bp end;
  1086.         asm  push ds end;
  1087.     asm  mov al,hdl end;
  1088.     asm  mov ah,letra end;
  1089.     asm  mov bl,pv end;
  1090.     asm  mov bh,color end;
  1091.         asm  push DESCLETRA end;
  1092.         asm CALL CallPas; pop ax end;
  1093.         asm  pop ds end;
  1094.         asm  pop bp end;END;
  1095.  
  1096. PROCEDURE Escribe(hdl:byte; cadena:string; pv, color, distx, disty:byte);
  1097. BEGIN
  1098.         Ssegmento:=SEG(cadena);
  1099.         Soffset:=OFS(cadena);
  1100.         asm  push bp end;
  1101.         asm  push ds end;
  1102.         asm  mov si,Soffset; inc si end;
  1103.     asm  mov ax,Ssegmento end;
  1104.     asm  mov ds,ax end;
  1105.     asm  mov al,hdl end;
  1106.     asm  mov bl,pv  end;
  1107.     asm  mov bh,color end;
  1108.     asm  mov cl,distx end;
  1109.     asm  mov dl,disty end;
  1110.         asm  push DESCRIBE end;
  1111.         asm CALL CallPas; pop ax end;
  1112.         asm  pop ds end;
  1113.         asm  pop bp end;
  1114. END;
  1115.  
  1116. FUNCTION LeeLetra:byte;
  1117. BEGIN
  1118.         asm  push DLEELETRA end;
  1119.         asm CALL CallPas; pop bx end;
  1120.         asm  mov bvuelta,al end;
  1121.         LeeLetra:=bvuelta;
  1122. END;
  1123.  
  1124. FUNCTION LeeLetraEcho(hdl, pv, color:byte):byte;
  1125. BEGIN
  1126.     asm  mov al,hdl end;
  1127.     asm  mov bl,pv  end;
  1128.     asm  mov bh,color end;
  1129.         asm  push DLEELETRAECHO end;
  1130.         asm CALL CallPas; pop bx end;
  1131.         asm  mov bvuelta,al end;
  1132.         LeeLetraEcho:=bvuelta;
  1133. END;
  1134.  
  1135. PROCEDURE LeeCadena(hdl:byte; buffer:string; pv, color, distx:byte; longi:word);
  1136. BEGIN
  1137.         Ssegmento:=SEG(buffer);
  1138.         Soffset:=OFS(buffer);
  1139.         asm  push ds end;
  1140.         asm  mov dx,Soffset; inc dx end;
  1141.     asm  mov ax,Ssegmento end;
  1142.     asm  mov ds,ax end;
  1143.     asm  mov al,hdl end;
  1144.     asm  mov bl,pv  end;
  1145.     asm  mov bh,color end;
  1146.     asm  mov ah,distx end;
  1147.     asm  mov cx,longi end;
  1148.         asm  push DLEECADENA end;
  1149.         asm CALL CallPas; pop ax end;
  1150.         asm  pop ds end;
  1151. END;
  1152.  
  1153. PROCEDURE Write(hdl:byte; cadena:string; pv, color, distx, disty:byte);
  1154. BEGIN
  1155.         Ssegmento:=SEG(cadena);
  1156.         Soffset:=OFS(cadena);
  1157.         asm  push bp end;
  1158.         asm  push ds end;
  1159.         asm  mov si,Soffset; inc si end;
  1160.     asm  mov ax,Ssegmento end;
  1161.     asm  mov ds,ax end;
  1162.     asm  mov al,hdl end;
  1163.     asm  mov bl,pv  end;
  1164.     asm  mov bh,color end;
  1165.     asm  mov cl,distx end;
  1166.     asm  mov dl,disty end;
  1167.         asm  push DWRITE end;
  1168.         asm CALL CallPas; pop ax end;
  1169.         asm  pop ds end;
  1170.         asm  pop bp end;
  1171. END;
  1172.  
  1173. PROCEDURE NuevoArchivo(nombre:string);
  1174. BEGIN
  1175.         Ssegmento:=SEG(nombre);
  1176.         Soffset:=OFS(nombre);
  1177.         asm  push ds end;
  1178.         asm  push bp end;
  1179.         asm  mov si,Soffset end;
  1180.         asm  mov ax,Ssegmento end;
  1181.         asm  mov ds,ax end;
  1182.         asm  push DNUEVOARCHIVO end;
  1183.         asm CALL CallPas; pop ax end;
  1184.         asm  pop bp end;
  1185.         asm  pop ds end;
  1186. END;
  1187.  
  1188. PROCEDURE LeeEntrada(buffer:pointer; campo:word);
  1189. BEGIN
  1190.         Ssegmento:=SEG(buffer);
  1191.         Soffset:=OFS(buffer);
  1192.         asm  push ds end;
  1193.         asm  push bp end;
  1194.         asm  mov di,Soffset end;
  1195.         asm  mov ax,Ssegmento end;
  1196.         asm  mov es,ax end;
  1197.         asm  mov ax,campo end;
  1198.         asm  push DLEEENTRADA end;
  1199.         asm CALL CallPas; pop ax end;
  1200.         asm  pop bp end;
  1201.         asm  pop ds end;
  1202. END;
  1203.  
  1204. PROCEDURE LeeTrozo(buffer:pointer; campo:word; longi, inicio:dword);
  1205. BEGIN
  1206.         Ssegmento:=SEG(buffer);
  1207.         Soffset:=OFS(buffer);
  1208.         asm  push ds end;
  1209.         asm  push bp end;
  1210.         asm  mov di,Soffset end;
  1211.         asm  mov ax,Ssegmento end;
  1212.         asm  mov es,ax end;
  1213.         asm  mov ax,campo end;
  1214.         asm  db 66h
  1215.              mov si, word ptr inicio end;
  1216.         asm  db 66h
  1217.              mov bp, word ptr longi end;
  1218.         asm  push DLEETROZO end;
  1219.         asm CALL CallPas; pop ax end;
  1220.         asm  pop bp end;
  1221.         asm  pop ds end;
  1222. END;
  1223.  
  1224. FUNCTION LongitudFile(campo:word):dword;
  1225. BEGIN
  1226.         asm  push ds end;
  1227.         asm  push bp end;
  1228.         asm  mov ax,campo end;
  1229.         asm  push DLONGITUDFILE end;
  1230.         asm CALL CallPas; pop ax end;
  1231.         asm  mov ax,bp end;
  1232.         asm  db 66h
  1233.              shr bp,16 end;
  1234.         asm  mov dx,bp end;
  1235.         asm  pop bp end;
  1236.         asm  pop ds end;
  1237. END;
  1238.  
  1239. PROCEDURE FlipCopy(Opv, Dpv:byte); BEGIN
  1240.         asm  push ds end;
  1241.         asm  push bp end;
  1242.         asm  mov al,Opv end;
  1243.         asm  mov ah,Dpv end;
  1244.         asm  push DFLIPCOPY end;
  1245.         asm CALL CallPas; pop ax end;
  1246.         asm  pop bp end;
  1247.         asm  pop ds end;
  1248. END;
  1249.  
  1250. PROCEDURE Flip(Opv:byte); BEGIN
  1251.         asm  push ds end;
  1252.         asm  push bp end;
  1253.         asm  mov al,Opv end;
  1254.         asm  push DFLIP end;
  1255.         asm CALL CallPas; pop ax end;
  1256.         asm  pop bp end;
  1257.         asm  pop ds end;
  1258. END;
  1259.  
  1260. FUNCTION SegmentoFuente(Hdl:byte):word;
  1261. BEGIN
  1262.         asm  mov al,Hdl end;
  1263.         asm  push DSEGMENTOFUENTE end;
  1264.         asm CALL CallPas; pop ax end;
  1265.         asm  mov wvuelta,es end;
  1266.         SegmentoFuente:=wvuelta;
  1267. END;
  1268.  
  1269. PROCEDURE DoblaLineas;
  1270. BEGIN
  1271.         asm  push DDOBLALINEAS end;
  1272.         asm CALL CallPas; pop ax end;
  1273. END;
  1274.  
  1275. PROCEDURE SetStart(direc:word);
  1276. BEGIN
  1277.         asm  mov bx,direc end;
  1278.         asm  push DSETSTART end;
  1279.         asm CALL CallPas; pop ax end;
  1280. END;
  1281.  
  1282. PROCEDURE SetVSPixels(lineas:byte);
  1283. BEGIN
  1284.         asm  mov ah,lineas end;
  1285.         asm  push DSETVSPIXELS end;
  1286.         asm CALL CallPas; pop ax end;
  1287. END;
  1288.  
  1289. FUNCTION PideXMS(memo:word):word;
  1290. BEGIN
  1291.         asm  push bp end;
  1292.         asm  mov dx,memo end;
  1293.         asm  push DPIDEXMS end;
  1294.         asm CALL CallPas; pop ax end;
  1295.     asm  mov wvuelta,dx end;
  1296.         asm  pop bp end;
  1297.         PideXMS:=wvuelta;
  1298. END;
  1299.  
  1300. PROCEDURE LiberaXMS(memo:word);
  1301. BEGIN
  1302.         asm  push bp end;
  1303.         asm  mov dx,memo end;
  1304.         asm  push DLIBERAXMS end;
  1305.         asm CALL CallPas; pop ax end;
  1306.         asm  pop bp end;
  1307. END;
  1308.  
  1309. FUNCTION GetAddress(hdl:word):dword;
  1310. BEGIN
  1311.         asm  mov dx,hdl end;
  1312.         asm  push DGETADDRESS end;
  1313.         asm CALL CallPas; pop ax end;
  1314.         asm  mov ax,dx end;
  1315.         asm  db 66h
  1316.              shr dx,16 end;
  1317. END;
  1318.  
  1319. FUNCTION MaximaXMS:word;
  1320. BEGIN
  1321.         asm  push DMAXIMAXMS end;
  1322.         asm CALL CallPas; pop ax end;
  1323.         asm  mov wvuelta,dx end;
  1324.         MaximaXMS:=wvuelta;
  1325. END;
  1326.  
  1327. FUNCTION GuardaFlat(hdl, tipo:byte):word; BEGIN
  1328.         asm  push ds end;
  1329.         asm  db 0Fh
  1330.              db 0A8h end;
  1331.         asm  push bp end;
  1332.         asm  mov al,hdl end;
  1333.         asm  mov ah,tipo end;
  1334.         asm  push DGUARDAFLAT end;
  1335.         asm CALL CallPas; pop ax end;
  1336.         asm  pop bp end;
  1337.         asm  db 0Fh
  1338.              db 0A9h end;
  1339.         asm  pop ds end;
  1340.         asm  mov wvuelta,dx end;
  1341.         GuardaFlat:=wvuelta;END;
  1342.  
  1343. PROCEDURE CargaFlat(hdl, tipo:byte; hdlxms:word); BEGIN
  1344.         asm  push ds end;
  1345.         asm  db 0Fh
  1346.              db 0A8h end;
  1347.         asm  push bp end;
  1348.         asm  mov al,hdl end;
  1349.         asm  mov ah,tipo end;
  1350.         asm  mov dx,hdlxms end;
  1351.         asm  push DCARGAFLAT end;
  1352.         asm CALL CallPas; pop ax end;
  1353.         asm  pop bp end;
  1354.         asm  db 0Fh
  1355.              db 0A9h end;
  1356.         asm  pop ds end;END;
  1357.  
  1358. FUNCTION CargaBloque(nombre:string):byte; BEGIN
  1359.         Ssegmento:=SEG(nombre);
  1360.         Soffset:=OFS(nombre);
  1361.         asm  push ds end;
  1362.         asm  push bp end;
  1363.         asm  mov dx,Soffset; inc dx end;
  1364.         asm  mov ax,Ssegmento end;
  1365.         asm  mov ds,ax end;
  1366.         asm  push DCARGABLOQUE end;
  1367.         asm CALL CallPas; pop bx end;
  1368.         asm  pop bp end;
  1369.         asm  pop ds end;
  1370.         asm  mov bvuelta,al end;
  1371.         CargaBloque:=bvuelta;END;
  1372.  
  1373. FUNCTION CargaMapa(nombre:string):byte; BEGIN
  1374.         Ssegmento:=SEG(nombre);
  1375.         Soffset:=OFS(nombre);
  1376.         asm  push ds end;
  1377.         asm  push bp end;
  1378.         asm  mov dx,Soffset; inc dx end;
  1379.         asm  mov ax,Ssegmento end;
  1380.         asm  mov ds,ax end;
  1381.         asm  push DCARGAMAPA end;
  1382.         asm CALL CallPas; pop bx end;
  1383.         asm  pop bp end;
  1384.         asm  pop ds end;
  1385.         asm  mov bvuelta,al end;
  1386.         CargaMapa:=bvuelta;END;
  1387.  
  1388. PROCEDURE DestBloque(hdl:byte); BEGIN
  1389.         asm  push bp end;
  1390.         asm  mov al,hdl end;
  1391.         asm  push DDESTBLOQUE end;
  1392.         asm CALL CallPas; pop ax end;
  1393.         asm  pop bp end;
  1394. END;
  1395.  
  1396. PROCEDURE DestMapa(hdl:byte); BEGIN
  1397.         asm  push bp end;
  1398.         asm  mov al,hdl end;
  1399.         asm  push DDESTMAPA end;
  1400.         asm CALL CallPas; pop ax end;
  1401.         asm  pop bp end;
  1402. END;
  1403.  
  1404. PROCEDURE DibujaMapa(pv, hmapa, hblk:byte; posx, posy:dword); BEGIN
  1405.         asm  push ds end;
  1406.         asm  db 0Fh
  1407.              db 0A8h end;
  1408.         asm  db 0Fh
  1409.              db 0A0h end;
  1410.         asm  push bp end;
  1411.         asm  mov al,pv end;
  1412.         asm  mov bl,hmapa end;
  1413.         asm  mov bh,hblk end;
  1414.         asm  db 66h
  1415.              mov cx, word ptr posx end;
  1416.         asm  db 66h
  1417.              mov dx, word ptr posy end;
  1418.         asm  push DDIBUJAMAPA end;
  1419.         asm CALL CallPas; pop ax end;
  1420.         asm  pop bp end;
  1421.         asm  db 0Fh
  1422.              db 0A1h end;
  1423.         asm  db 0Fh
  1424.              db 0A9h end;
  1425.         asm  pop ds end;
  1426. END;
  1427.  
  1428. FUNCTION PosMapa(hdl:byte; posx, posy:word):word; BEGIN
  1429.         asm  push ds end;
  1430.         asm  push bp end;
  1431.         asm  mov al,hdl end;
  1432.         asm  mov cx,posx end;
  1433.         asm  mov dx,posy end;
  1434.         asm  push DPOSMAPA end;
  1435.         asm CALL CallPas; pop bx end;
  1436.         asm  pop bp end;
  1437.         asm  pop ds end;
  1438.         asm  mov wvuelta,ax end;
  1439.         PosMapa:=wvuelta;END;
  1440.  
  1441. PROCEDURE InsertaDirBloque(segm:word; longx, longy:byte; numero:word); BEGIN
  1442.         asm  mov ax,segm end;
  1443.         asm  mov es,ax end;
  1444.         asm  mov cl,longy end;
  1445.         asm  mov dh,longx end;
  1446.         asm  mov dx,numero end;
  1447.         asm  push DINSERTADIRBLOQUE end;
  1448.         asm CALL CallPas; pop ax end;
  1449. END;
  1450.  
  1451. PROCEDURE InsertaDirMapa(segm, longx, longy:word); BEGIN
  1452.         asm  mov ax,segm end;
  1453.         asm  mov es,ax end;
  1454.         asm  mov cx,longy end;
  1455.         asm  mov dx,longx end;
  1456.         asm  push DINSERTADIRMAPA end;
  1457.         asm CALL CallPas; pop ax end;
  1458. END;
  1459.  
  1460. PROCEDURE ResetGRAPH(modo:word; flags:dword); BEGIN
  1461.         asm  push ds end;
  1462.         asm  push bp end;
  1463.         asm  mov bx,modo end;
  1464.         asm  db 66h
  1465.              mov ax, word ptr flags end;
  1466.         asm  push DRESETGRAPH end;
  1467.         asm CALL CallPas; pop ax end;
  1468.         asm  pop bp end;
  1469.         asm  pop ds end;
  1470. END;
  1471.  
  1472. FUNCTION SegmentoBloque(Hdl:byte):word; BEGIN
  1473.         asm  mov al,Hdl end;
  1474.         asm  push DSEGMENTOBLOQUE end;
  1475.         asm CALL CallPas; pop ax end;
  1476.         asm  mov wvuelta,es end;
  1477.         SegmentoBloque:=wvuelta;END;
  1478.  
  1479. FUNCTION SegmentoMapa(Hdl:byte):word; BEGIN
  1480.         asm  mov al,Hdl end;
  1481.         asm  push DSEGMENTOMAPA end;
  1482.         asm CALL CallPas; pop ax end;
  1483.         asm  mov wvuelta,es end;
  1484.         SegmentoMapa:=wvuelta;END;
  1485.  
  1486. PROCEDURE PlayFLI(nombre:string; pausa:word); BEGIN
  1487.         Ssegmento:=SEG(nombre);
  1488.         Soffset:=OFS(nombre);
  1489.         asm  push ds end;
  1490.         asm  push bp end;
  1491.         asm  mov dx,Soffset; inc dx end;
  1492.         asm  mov ax,Ssegmento end;
  1493.         asm  mov ds,ax end;
  1494.         asm  mov ax,pausa end;
  1495.         asm  push DPLAYFLI end;
  1496.         asm CALL CallPas; pop ax end;
  1497.         asm  pop bp end;
  1498.         asm  pop ds end;
  1499. END;
  1500.  
  1501. FUNCTION CreaMapa(longx, longy:word):byte; BEGIN
  1502.         asm  push bp end;
  1503.         asm  mov ax,longx end;
  1504.         asm  mov cx,longy end;
  1505.         asm  push DCREAMAPA end;
  1506.         asm CALL CallPas; pop bx end;
  1507.         asm  mov bvuelta,al end;
  1508.         asm  pop bp end;
  1509.         CreaMapa:=bvuelta;END;
  1510.  
  1511. FUNCTION CreaBloque(longx, longy:byte; numero:word):byte; BEGIN
  1512.         asm  push bp end;
  1513.         asm  mov al,longx end;
  1514.         asm  mov ah,longy end;
  1515.         asm  mov cx,numero end;
  1516.         asm  push DCREABLOQUE end;
  1517.         asm CALL CallPas; pop bx end;
  1518.         asm  mov bvuelta,al end;
  1519.         asm  pop bp end;
  1520.         CreaBloque:=bvuelta;END;
  1521.  
  1522. PROCEDURE DestFuente(hdl:byte); BEGIN
  1523.         asm  push bp end;
  1524.         asm  mov al,hdl end;
  1525.         asm  push DDESTFUENTE end;
  1526.         asm CALL CallPas; pop ax end;
  1527.         asm  pop bp end;
  1528. END;
  1529.  
  1530. PROCEDURE InsertaDirFuente(segm:word; longx, longy, prim, ult:byte);
  1531. BEGIN
  1532.         asm  mov ax,segm end;
  1533.         asm  mov es,ax end;
  1534.         asm  mov cl,longy end;
  1535.         asm  mov ch,longx end;
  1536.         asm  mov al,prim end;
  1537.         asm  mov ah,ult end;
  1538.         asm  push DINSERTADIRFUENTE end;
  1539.         asm CALL CallPas; pop ax end;
  1540. END;
  1541.  
  1542. BEGIN
  1543.   CargaDS(32);
  1544.   For i:=1 To 100 Do
  1545.     Bolsa[i]:=NIL;
  1546.   InicPas;
  1547. END.
  1548.